iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 29
0
Cloud

用30天來建構和操作Apache Mesos系列 第 29

Day29:實作一個自訂的Mesos Framework(一)

  • 分享至 

  • xImage
  •  

前面幾天使用了很多的已經開發的Mesos Framework,如:Marathon、Chronos、Aurora……等等,它們的服務類型有long time service、cron job。之後有可能會根據自已的需求開發一個自訂義的Mesos Framewor,這樣也可以對Mesos Fraemwork的資源調度器和執行器有更進一些的了解。

在開發Mesos Framework時主要有Scheduler和Executor這兩個元件組合而成的,Executor不是必要的元件,以下的Demo使用Java開發只實作Scheduler的部份。

依照下面的步驟來開發自訂義的Mesos Framework:

一.建立開發環境,使用Java、Eclipse、Gradle

二.撰寫簡單的Scheduler Java Code

三.把撰寫完的程式Build成Jar檔

四.執行自訂義的Mesos Framework

五.使用Mesos WebUI檢查自訂的Framework是否有被註冊進Mesos裡

就依照上面的步驟來實作Mesos Framework

一.建立開發環境,使用Java、Eclipse、Gradle

Java、Eclipse、Gradle的安裝可以參考官方網站的文件安裝,

(1)建立source code的資料夾

# mkdir -p src/main/java
# mkdir -p src/test/java

資料夾的結構如下圖

http://ithelp.ithome.com.tw/upload/images/20161229/20103456DjDwUVQzFR.png

(2)撰寫build.grale的設定如下:

apply plugin: 'java'
apply plugin: 'eclipse'

eclipse {
  jdt {
    sourceCompatibility = 1.7
    targetCompatibility = 1.7
  }
}

repositories {
  mavenCentral()
}

dependencies {
  compile('org.apache.mesos:mesos:0.28.2');
}

可以按照需求更改mesos的版本或是加入新的要引入的Jar檔

(3)使用Gradle Build出,可以在Eclipse開發的環境

# gradle eclipse

(4)把開發的資料夾Import到Eclipse裡

http://ithelp.ithome.com.tw/upload/images/20161229/20103456nKKJ2kTFxJ.png

二. 撰寫簡單的Scheduler Java Code

程式碼如下:

MyScheduler.java

package idv.jack.mesos;

import java.util.List;

import org.apache.mesos.Protos.ExecutorID;
import org.apache.mesos.Protos.FrameworkID;
import org.apache.mesos.Protos.MasterInfo;
import org.apache.mesos.Protos.Offer;
import org.apache.mesos.Protos.OfferID;
import org.apache.mesos.Protos.SlaveID;
import org.apache.mesos.Protos.TaskStatus;
import org.apache.mesos.Scheduler;
import org.apache.mesos.SchedulerDriver;

public class MyScheduler implements Scheduler{

    @Override
    public void registered(SchedulerDriver driver, FrameworkID frameworkId,
            MasterInfo masterInfo) {
        System.out.println("Scheduler id " + frameworkId.getValue());
    }

    @Override
    public void reregistered(SchedulerDriver driver, MasterInfo masterInfo) {
        System.out.println("Scheduler reregistered");
    }

    @Override
    public void resourceOffers(SchedulerDriver driver, List<Offer> offers) {
        System.out.println("received offers");
    }

    @Override
    public void offerRescinded(SchedulerDriver driver, OfferID offerId) {
        
    }

    @Override
    public void statusUpdate(SchedulerDriver driver, TaskStatus status) {
        
    }

    @Override
    public void frameworkMessage(SchedulerDriver driver, ExecutorID executorId,
            SlaveID slaveId, byte[] data) {
        
    }

    @Override
    public void disconnected(SchedulerDriver driver) {

    }

    @Override
    public void slaveLost(SchedulerDriver driver, SlaveID slaveId) {

    }

    @Override
    public void executorLost(SchedulerDriver driver, ExecutorID executorId,
            SlaveID slaveId, int status) {
        
    }

    @Override
    public void error(SchedulerDriver driver, String message) {

    }
}

這個class最重要的method是resourceOffers它主要是可以拿來接收master所發出來的資源Offer

App.java

package idv.jack.mesos;

import org.apache.mesos.MesosSchedulerDriver;
import org.apache.mesos.Protos;

public class App {
    public static void main(String args[]){
        Protos.FrameworkInfo.Builder frameworkInfoBuilder = Protos.FrameworkInfo.newBuilder();
        frameworkInfoBuilder.setName("MY-FRAMEWORK");
        frameworkInfoBuilder.setUser("");
        
        Protos.FrameworkInfo frameworkInfo = frameworkInfoBuilder.build();
        
        //args[0] is mesos master ip address
        MesosSchedulerDriver schedulerDriver = new MesosSchedulerDriver(new MyScheduler(), frameworkInfo, args[0]);
        
        schedulerDriver.run();
    }
}

明天第30天最後一天,會繼續介紹如何build出jar檔、執行自訂義的Mesos Framework…等等的項目。


上一篇
Day28:在Mesos上執行Docker Container(四)
下一篇
Day30:實作一個自訂的Mesos Framework(二)
系列文
用30天來建構和操作Apache Mesos30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言